#include <iostream>
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string>
#include <cstdlib>
#include <unistd.h>
#include <fcntl.h>
#include <cstdio>
#include <string.h>

using namespace std;

int main()
{
    int wfd = open("mypipe", O_WRONLY);
    if (wfd < 0)
    {
        perror("open");
        exit(-2);
    }
    //这里并没有进行初始化，之前的运行恐怕都是巧合
    char buf[1024];
    while (1)
    {
        printf("Please Enter# ");
        //原来它的作用是将前一句的输出内容进行打印，毕竟文件时全缓冲
        fflush(stdout);
        ssize_t s = read(0, buf, sizeof(buf)-1);
        if (s > 0)
        {
            buf[s] = 0;
            write(wfd, buf, strlen(buf));
        }
        else if (s <= 0)
        {
            perror("read");
            exit(-2);
        }
    }
    close(wfd);
    return 0;
}
// int main()
// {
//     umask(0);
//     if (mkfifo("mypipe", 0644) < 0)
//     {
//         perror("mkfifo");
//         exit(-1);
//     }
//     int rfd = open("mypipe", O_RDONLY);
//     if (rfd < 0)
//     {
//         perror("open");
//         exit(-1);
//     }
//     char buf[1024];
//     while (1)
//     {
//         buf[0] = 0;
//         printf("Please wait...\n");
//         ssize_t s = read(rfd, buf, sizeof(buf) - 1);
//         if (s > 0)
//         {
//             buf[s - 1] = 0;
//             printf("client say# %s\n", buf);
//         }
//         else if (s == 0)
//         {
//             printf("client quit, exit now!\n");
//             exit(EXIT_SUCCESS);
//         }
//         else
//         {
//             perror("read");
//             exit(-2);
//         }
//     }

//     close(rfd);
//     return 0;
// }
// int main()
// {
//     int fd=open("mypipe",O_WRONLY);
//     if(fd < 0)
//     {
//         perror("open");
//         exit(-1);
//     }
//     char buffer[1024];
//     while(true)
//     {
//         cout<<"Please Enter Message:>"<<endl;
//         ssize_t s=read(0,buffer,strlen(buffer));
//         if(s > 0)
//         {
//             buffer[s]=0;
//             write(fd,buffer,strlen(buffer));
//         }
//         else if(s<=0)
//         {
//             perror("read");
//             break;
//         }
//     }
//     close(fd);
//     return 0;
// }
// int main()
// {
//     int fd=open("myfile",O_WRONLY);
//     if(fd < 0)
//     {
//         perror("open");
//         exit(-1);
//     }
//     char buffer[1024];
//     while(true)
//     {
//         ssize_t s=read(0,buffer,strlen(buffer));
//         if(s > 0)
//         {
//             write(fd,buffer,strlen(buffer));
//             break;
//         }
//         else if(s == 0)
//         {
//             cerr<<"read end of file"<<endl;
//             break;
//         }
//         else
//         {
//             perror("read");
//             exit(-1);
//         }
//     }
//     close(fd);
//     return 0;
// }
// int main()
// {
//     int fd=open("mypipe",O_WRONLY);
//     if(fd < 0)
//     {
//         perror("open");
//         exit(-1);
//     }
//     char buffer[1024];
//     while(true)
//     {
//         cout<<"Please Enter Message"<<endl;
//         fflush(stdout);
//         //可以直接用read接口读取标准输入键盘当中的数据
//         ssize_t s=read(0,buffer,strlen(buffer));
//         if(s > 0)
//         {
//             write(fd,buffer,strlen(buffer));
//         }
//         else if(s == 0)
//         {
//             cerr<<"["<<getpid()<<"]"<<buffer<<endl;
//             break;
//         }
//         else
//         {
//             perror("read");
//             break;
//         }
//         // getline(cin,buffer);
//         // write(fd,buffer.c_str(),buffer.size());
//     }
//     close(fd);
//     return 0;
// }
// 这里管道打开成功呢
// int main()
// {
//     int fd=open("mypipe",O_WRONLY);
//     if(fd < 0)
//     {
//         perror("open");
//         exit(-1);
//     }

//     char buffer[1024];
//     //这里要进行反复地发送消息
//     while(true)
//     {
//         buffer[0]=0;
//         cout<<"Please Enter Message:>"<<endl;
//         fflush(stdout);
//         ssize_t s=read(fd,buffer,strlen(buffer));
//         if(s > 0)
//         {
//             buffer[s]=0;
//             write(fd,buffer,strlen(buffer));
//         }
//         else if(s == 0)
//         {
//             cerr<<"["<<getpid()<<"]"<<"read end of file"<<endl;
//             break;
//         }
//         else
//         {
//             cout<<"read"<<endl;
//             break;
//         }
//     }
//     close(fd);
//     return 0;
// }